package aiku.numericalcontroloa.Controller.Devices;

import aiku.numericalcontroloa.Base.Utils.Result;
import aiku.numericalcontroloa.Model.Dto.DevicesDto;
import aiku.numericalcontroloa.Model.Dto.DevicesOutboundDto;
import aiku.numericalcontroloa.Model.Entity.DevicesOutbound;
import aiku.numericalcontroloa.Model.Entity.DevicesReturn;
import aiku.numericalcontroloa.Service.Impl.DevicesOutboundServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

/**
 * @author 马文杰
 * @version 1.0
 */
@RestController
@RequestMapping("/devicesOutbound")
@Slf4j
public class DevicesOutboundController {
    @Autowired
    private DevicesOutboundServiceImpl devicesOutboundService;
    /**
     * @return 用户出库申请
     */
    @PostMapping("/applyOutbound")
    public Result applyOutbound(@RequestBody DevicesOutbound devicesOutbound) {
        Result result = devicesOutboundService.applyOutbound(devicesOutbound);
       return result;
    }

    /**
     * @return 管理审核出库
     * @param devicesOutboundId 出库订单id
     * @param status 审核状态
     */
    @PostMapping("/adminCheckOutbound")
    @Transactional  //添加事务
    public Result adminCheckOutbound(@RequestParam("devicesOutboundId") String devicesOutboundId,@RequestParam("status") Integer status) {
        Result result = devicesOutboundService.adminCheckOutbound(devicesOutboundId,status);
        return result;
    }

    /**
     * 管理分页查询出库订单
     */
    @PostMapping("/selectList")
    public Result selectList(@RequestParam("page") Integer page, @RequestParam("size") Integer size, @RequestParam("status") Integer status) {
        Result result = devicesOutboundService.selectList(page, size, status);
        return result;
    }


    /**
     * 通过id查询出库订单信息
     */
    @PostMapping("/selectById")
    public Result selectById(@RequestParam("devicesOutboundId") String devicesOutboundId) {
        Result result = devicesOutboundService.selectById(devicesOutboundId);
        return result;
    }

    /**
     * 用户归还设备申请
     */
    @PostMapping("/devReturn")
    public Result devReturn(@RequestBody DevicesReturn devicesReturn) {
        Result result = devicesOutboundService.devReturn(devicesReturn);
        return result;
    }

    /**
     * 分页获取出库列表
     * 可根据申请人，状态查询
     * @param devicesOutboundDto
     * @return
     */
    @PostMapping("/getDevicesOutboundList")
    public Result getDevicesOutboundList(@RequestBody DevicesOutboundDto devicesOutboundDto){
        return devicesOutboundService.getDevicesOutboundList(devicesOutboundDto);
    }

    /**
     * 获取单个出库信息
     * @param devicesOutboundDto
     * @return
     */
    @PostMapping("/getDevicesOutbound")
    public Result getDevicesOutbound(@RequestBody DevicesOutboundDto devicesOutboundDto){
        return devicesOutboundService.getDevicesOutbound(devicesOutboundDto);
    }

    /**
     * 员工借出
     * @param devicesOutboundDto
     * @return
     */
    @PostMapping("/addDevicesOutbound")
    public Result addDevicesOutbound(@RequestBody DevicesOutboundDto devicesOutboundDto){
        return devicesOutboundService.addDevicesOutbound(devicesOutboundDto);
    }

    /**
     * 修改
     * @param devicesOutboundDto
     * @return
     */
    @PostMapping("/updateDevicesOutbound")
    public Result updateDevicesOutbound(@RequestBody DevicesOutboundDto devicesOutboundDto){
        return devicesOutboundService.updateDevicesOutbound(devicesOutboundDto);
    }

    /**
     * 审核
     * @param devicesOutboundDto
     * @return
     */
    @PostMapping("/examineDevicesOutbound")
    public Result examineDevicesOutbound(@RequestBody DevicesOutboundDto devicesOutboundDto){
        return devicesOutboundService.examineDevicesOutbound(devicesOutboundDto);
    }

/**
     * 删除
     * @param devicesOutboundDto
     * @return
     */
    @PostMapping("/deleteOutbound")
    public Result deleteOutbound(@RequestBody DevicesOutboundDto devicesOutboundDto){
        return devicesOutboundService.deleteOutbound(devicesOutboundDto);
    }
}
